﻿package chart;

import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;

import db.DBManager;

/**
 * カテゴリ別のアイテム数（円グラフ）
 */
public class JFreeChartServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
																			throws ServletException, IOException {
		//	パラメータを受け取る
		String type = request.getParameter("type");
		// コンテンツタイプを設定
		response.setContentType("image/png");
		//	パラメータによって出力するグラフを切り替える
		if ("pie".equals(type) || "pie3d".equals(type)) {
			drawPie(response, type);
		}
		response.getOutputStream().flush();
	}
	/**
	 * 円グラフを描画する
	 * @param response
	 * @param type
	 * @throws IOException
	 */
	private void drawPie(HttpServletResponse response, String type) throws IOException {
		// 円グラフ用のデータ作成
		DefaultPieDataset data = new DefaultPieDataset();
		//	データベースから検索
		Connection con = DBManager.getConnection();
		try {
			String sql =
				"select category.code as c, category.name as n, count(item.id) as cnt " +
				"from item " +
				"left join category on item.category_code = category.code " +
				"group by category_code " +
				"order by category.code";
			Statement stm = con.createStatement();
			ResultSet rs = stm.executeQuery(sql);
			while ( rs.next() )	{
				data.setValue(
				String.format("%s (%d)", rs.getString("n"), rs.getInt("cnt")),		//	項目名
				rs.getInt("cnt"));																			//	数値
			}
			rs.close();
			stm.close();
			con.close();
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		JFreeChart chart = null;
		if ("pie3d".equals(type)) {
			chart = new JFreeChart(new PiePlot3D(data));
		}
		else {
			chart = new JFreeChart(new PiePlot(data));
		}
		// グラフ出力
		ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, 600, 400);
	}
}
